14.Embedded Networking and Communications

The best thing about teamwork is personal achievements.

This week we learned that Jumps are instructions that allow the value of the PC to be modified, allowing the program to continue its execution in an instruction other than the next memory location.

We can program the interface functionality inside the converted .py file, but that would be a mistake: every time we need to make a change to the QTDesigner interface, all the code inside the file will be deleted and replaced with the updated code, process which will make all of our custom code disappear.

It is best to copy the custom code somewhere else, then update the file and paste the code back into it; but there is certainly a much easier and more pragmatic way to do this: Separate your code into two discrete files, one for the interface and one for its functionality, and then Combine them into a single program using imports.

master


								#include Wire.h // Servo.h entre los signos de menor que y mayor que

	#define BUTTON_PIN A1  // Pin del botón conectado al RP2040
	#define SLAVE_ADDRESS 0x10  // Dirección I2C del ATtiny como esclavo
			
	bool communicationActive = false;
			
	void setup() {
		Wire.begin();  // Inicia la comunicación I2C como maestro
		pinMode(BUTTON_PIN, INPUT_PULLDOWN);  // Configura el pin del botón como entrada con resistencia de pull-down
	    }
			
	void loop() {
		// Verifica el estado del botón para activar o desactivar la comunicación
		if (digitalRead(BUTTON_PIN) == HIGH && !communicationActive) {
		// Si se presiona el botón y la comunicación no está activa, inicia la comunicación
		communicationActive = true;
		startCommunication();
	  } else if (digitalRead(BUTTON_PIN) == LOW && communicationActive) {
		// Si se suelta el botón y la comunicación está activa, detén la comunicación
		communicationActive = false;
		stopCommunication();
	  }
			  
	  // Si la comunicación está activa, realiza las operaciones de control del servomotor
	  if (communicationActive) {
		moveServo(SLAVE_ADDRESS, 0);  // Ejemplo: mueve el servomotor a 0 grados
		delay(1000);  // Ejemplo: espera 1 segundo entre movimientos
		moveServo(SLAVE_ADDRESS, 180);  // Ejemplo: mueve el servomotor a 180 grados
		delay(1000);  // Ejemplo: espera 1 segundo entre movimientos
	  }
	}
			
	void startCommunication() {
	  // Puedes realizar acciones adicionales al iniciar la comunicación, si es necesario
	  // Por ejemplo, inicializar variables, enviar comandos de inicialización, etc.
	}
			
	void stopCommunication() {
	  // Puedes realizar acciones adicionales al detener la comunicación, si es necesario
	  // Por ejemplo, enviar comandos de apagado, liberar recursos, etc.
	}
			
	void moveServo(int address, int angle) {
	  Wire.beginTransmission(address);
	  Wire.write(angle);
	  Wire.endTransmission();
		}							
							

slave


								#include Servo.h // Servo.h entre los signos de menor que y mayor que

								Servo esclavo;
						
								void setup() {
									wire.begin(0x10); // Direccción I2C del Attiny como esclavo
									wire.onReceive(receiveEvent);
									raul.attach(4); Pin donde se conecta el servomotor
								}
						
								coid loop() {
									delay(100);
								}
						
								void receiveEvent(int bytes) {
									if (wire.available() >=1) {
										int angle = wire.read();
									}
								}